﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int main()
//{
//	int num = 1;
//	num = num << 1;
//	printf("%d", num);
//	return 0;
//}

//int main()//左边⽤原该值的符号位填充，右边丢弃
//{
//	int num = 1;
//	num = num >> 1;
//	printf("%d", num);
//	return 0;
//}

//int main()
//{
//	int num1 = -3;
//	int num2 = 5;
//	printf("%d\n", num1 & num2);//见0取0，两个同时为1时取1
//	//1...0000..011
//	//1...1111..101(-3)补码
//	//0...0000..101(5)补码
//	//0...0000..101
//	printf("%d\n", num1 | num2);//见1取1，两个同时为0时取0
//	//1...1111..101
//	//1...1111..100
//	//1...0000..011
//	printf("%d\n", num1 ^ num2);//相同取0，相反取1
//	//1...1111..000
//	//1...0000..110
//	printf("%d\n", ~0);
//	//000.......000
//	//111.......111
//	return 0;
//}

//不用第三个变量交换
//int main()
//{
//	int a = 10;
//	int b = 20;
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//    printf("a = %d b = %d\n", a, b);
//	return 0;
//}

//int main()
//{
//	int a = 10;
//	int b = 20;
//	a = a + b;
//	b = a - b;
//	a = a - b;
//	printf("a = %d b = %d\n", a, b);
//}

//求⼀个整数存储在内存中的⼆进制中1的个数。
//int main()
//{
//	int a = 15;
//	int count = 0;
//	while (a)
//	{
//		if (a % 2 == 1)
//			count++;
//			a = a /2;
//
//	}
//	printf("%d", count);
//	return 0;
//}

//int main()
//{
//	int i = 0;
//	int a = 15;
//	int count = 0;
//	for (i = 0; i < 32; i++)
//	{
//		if ((a >> i) & 1)//0.....01111
//			             //0.....00001
//			count++;
//	}
//	printf("%d", count);
//	return 0;
//}

//int main()
//{
//	int a = 15;
//	int count = 0;
//	while (a)
//	{
//		a = a & (a - 1);
//		count++;
//	}          
//	printf("%d", count);
//	return 0;
//}
//01111
//01110
//01110 1
//01101
//01100 2
//01011
//01000 3
//00111
//00000 4

//编写代码将13⼆进制序列的第5位修改为1，然后再改回0
//0....01101    
//0....10000    
//0....11101 29
//0....01111 
int main()
{
	int a = 13;
	a = a | (1 << 4);
	printf("a = %d\n", a);
	a = a & ~(1 << 4);
	printf("a = %d\n", a);
	return 0;
}
